<?php

namespace App\Front\traits;
/**
 * 本Trait用来生成标准JSON格式的response信息，包括正确和错误信息，发送给客户端
 */
trait ApiResponse
{
    protected $statusText = array(  //所有相应的错误码和错误信息提示
        'E001' => '服务器内部错误',
        'E002' => '无效的请求',
        'E003' => '版本号异常',
        'E004' => '用户id不能为空',
        'E005' => '缺少签名参数',
        'E006' => '缺少时间戳参数',
        'E007' => '签名已过期',
        'E008' => '当前用户不存在',
        'E009' => '当前用户token已过期',
        'E010' => '当前用户签名错误',
        'E011' => '当前用户被封禁',
        'E012' => '当前设备被封禁',
    );

    /**
     *返回一个成功的响应数据方法和格式
     * @param array $data 返回给客户端的数据，是一个数组
     * @param string $message 返给客户端的成功消息，可以使用默认值
     */
    public function success($message = 'success', $data = [])
    {
        return $this->json($data, 200, $message);
    }

    /**
     *返回一个错误的响应方法和格式
     * @param string $status 设置错误状态码
     * @param string $message 返给客户端的错误消息，默认使用状态码获取与对应的值返回
     */
    public function error($status = 'E001', $message = 'error')
    {
        if ($message == 'error' && !empty($this->statusText[$status])) {
            $message = $this->statusText[$status];
        }
        return $this->json([], $status, $message);
    }

    //用于生成统一的JSON格式数据，被本类succe和error方法调用
    public function json($data = [], $status = 0, $message = '')
    {
        //返回的数据格式
        $response = ['code' => $status, 'message' => $message, 'data' => $data];
        //响应给客户端的消息
        //return response()->json($response); //中文按unicode返回
        return response()->json($response)->setEncodingOptions(JSON_UNESCAPED_UNICODE); //中文直接显示
    }
}




